package com.linkgie.galaxyframework.crypto;

import com.linkgie.galaxyframework.utils.Base58Encoding;

/**
 * 基于公钥的密码地址；
 * <p>
 * 
 * @author spring
 *
 */
public interface PublicKeyAddress extends CryptoAddress{

	/**
	 * 公钥；
	 * 
	 * @return
	 */
	PublicKey getPublicKey();

	/**
	 * 字节数组形式的“地址”；
	 * <p>
	 * 
	 * 返回结果是未编码的“地址”字节，不包含编码前缀；<br>
	 * 
	 * 由于“地址”是基于公钥的原始数据生成的，因而此方法的返回值是平台无关、实现无关的，相同的公钥数据得到相同的结果；
	 * 
	 * @return 字节数组形式的“地址”；
	 */
	@Override
	byte[] toBytes();

	/**
	 * Base58 格式的“地址”；
	 * <p>
	 * 返回结果是未编码的“地址”字节，不包含编码前缀；<br>
	 * 
	 * 由于“地址”是基于公钥的原始数据生成的，因而此方法的返回值是平台无关、实现无关的，相同的公钥数据得到相同的结果；
	 * @return
	 */
	@Override
	default String toBase58() {
		return Base58Encoding.encode(toBytes());
	}

	/**
	 * Base58Checksum Encoding 形式的“地址”；
	 * <p>
	 * 
	 * 参考 {@link Base58ChecksumEncoding}；
	 * <p>
	 * 
	 * @return Base58Check 编码的字符串；其二进制形式的头部为前缀 {@link #getEncodingPrefix()}
	 */
	String toBase58Checksum();

//	/**
//	 * Base58Check 编码的前缀；
//	 * 
//	 * @return
//	 */
//	int getEncodingPrefix();

}
